package com.howlaisi.sms.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.howlaisi.common.result.PageResult;
import com.howlaisi.common.result.Result;
import com.howlaisi.common.result.ResultCode;
import com.howlaisi.sms.student.exception.StudentException;
import com.howlaisi.sms.student.form.StudentForm;
import com.howlaisi.sms.student.pojo.entity.StudentEntity;
import com.howlaisi.sms.student.pojo.query.StudentPageQuery;
import com.howlaisi.sms.student.pojo.vo.StudentVO;
import com.howlaisi.sms.student.service.StudentService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * @author 张师傅
 * @date 2024/9/4
 */
@CrossOrigin
@RestController
@RequestMapping("/api/student")
@RequiredArgsConstructor
public class StudentController {
    private final StudentService studentService;

    /**
     * 分页查询学生信息
     *
     * @param queryParams 分页查询参数对象
     * @return 分页查询结果对象，包含学生信息列表和分页信息
     */
    @GetMapping("/pages")
    public PageResult<StudentVO> listUserPages(StudentPageQuery queryParams) {
        IPage<StudentVO> result = studentService.listStudentPages(queryParams);
        return PageResult.success(result);
    }
    /**
     * 根据学生ID获取学生信息
     *
     * @param id 学生ID
     * @return Result<StudentEntity> 包含学生信息的Result对象，若学生不存在则返回异常
     */
    @GetMapping("/{id}")
    public Result<StudentEntity> getStudentById(@PathVariable Long id) {
        StudentEntity studentEntity = studentService.getById(id);
        if (studentEntity == null) {
            throw new StudentException(ResultCode.STUDENT_NOT_EXIST);
        }
        return Result.success(studentEntity);
    }
    /**
     * 添加学生信息
     *
     * @param form 学生表单对象，包含需要添加的学生信息
     * @return Result<StudentEntity> 操作结果，包含操作是否成功以及新添加的学生信息（如果操作成功）
     */
    @PostMapping
    public Result<StudentEntity> addStudent(@RequestBody StudentForm form) {
        boolean result = studentService.saveStudent(form);
        return Result.judge(result);
    }
    /**
     * 删除学生信息
     *
     * @param ids 学生ID的字符串，多个ID之间用逗号分隔
     * @return Result<StudentEntity> 删除操作的结果，包含操作是否成功
     */
    @DeleteMapping("/{ids}")
    public Result<StudentEntity> deleteStudent(@PathVariable String ids) {
        // 不使用真正删除，只是修改状态
        boolean result = studentService.deleteStudents(ids);
        return Result.judge(result);
    }
    /**
     * 更新学生信息
     *
     * @param form 学生表单对象，包含需要更新的学生信息
     * @return Result<StudentEntity> 操作结果，包含操作是否成功以及更新后的学生信息（如果操作成功）
     */
    @PutMapping()
    public Result<StudentEntity> updateStudent(@RequestBody StudentForm form) {
        boolean result = studentService.updateStudent(form);
        return Result.judge(result);
    }
}
